#!/usr/bin/env node

// Node CLI 应用入口文件必须要有上面的文件头
// linux/macOS 系统需要修改此文件的读写权限为 755
// chmod 755 cli.js

// 通过yarn link 将 cli 暴露到全局 注：mac下 要加sudo 

// 脚手架的工作过程
/** 
 * 1. 通过命令行交互询问用户问题 inquirer
 * 2. 根据用户的选择生成文件 模板
*/


const inquirer = require('inquirer');
const path = require('path');
const fs = require('fs');
const ejs = require('ejs')

// prompt 方法用于发起命令行询问
// 接收一个数组参数，数组中的成员发起命令行的问题
inquirer.prompt([{
  type: 'input', // 问题的输入方式
  name: 'name', // 问题返回值的键
  message: 'project name?', // 问题的描述
}]).then(answers => {
  console.log('answers-->', answers);
  // 根据用户回答的结果生成文件

  // __dirname 绝对路径
  // 模板所在目录
  const tmpDir = path.join(__dirname, 'templates');
  // 目标目录
  const targetDir = process.cwd();

  // 将模板下的文件全部转换到目标目录
  fs.readdir(tmpDir, (err, files) => {
    if (err) { throw err };
    // files 是 templates 下所有文件的相对路径
    files.forEach(file => {
      // 通过 ejs 模板引擎 渲染文件
      ejs.renderFile(path.join(tmpDir, file), answers, (err, result) => {
        if (err) { throw err };

        // 将引擎渲染结果写入目标目录
        fs.writeFileSync(path.join(targetDir,file), result);
      })
    })
  })
})

